/**
 * @file Pixel.h
 * @brief Fichier d'entête du module Pixel.
 *
 * 
 */
#ifndef H_PIXEL_H
#define H_PIXEL_H

/* ********************************************************************* */
/*                                                                       */
/*                        Librairies de Pixel                          */
/*                                                                       */
/* ********************************************************************* */

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

/* ********************************************************************* */
/*                                                                       */
/*                        Définitions de type                           */
/*                                                                       */
/* ********************************************************************* */

/**
 * @struct Pixel
 * @brief Structure utilisée pour la gestion d'une image.
 *
 * Cette structure est utilisée pour gérer une image.
 Les champs de cette structures doivent être modifiés ou lus
 par les accesseurs et mutateurs.
 */

    struct sPixel {

        int r ;
        int v ;
        int b ;
    } ;

/**
 * @typedef Pixel
 * @brief Redéfinit la structure sPixel.
 */
typedef struct sPixel Pixel ;

/* ********************************************************************* */
/*                                                                       */
/*                 Fonctions relatives aux images                        */
/*                                                                       */
/* ********************************************************************* */

/**
 * @fn int getPixelRouge(const Pixel *pix)
 * @brief Récupère la valeur rouge du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in] pix pointeur sur Pixel.
 * @return Un entier, la valeur rouge du pixel seléctioné.
 */
int getPixelRouge(const Pixel *pix) ;

/**
 * @fn int getPixelVert(const Pixel *pix)
 * @brief Récupère la valeur vert du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in] pix pointeur sur Pixel.
 * @return Un entier, la valeur vert du pixel seléctioné.
 */
int getPixelVert(const Pixel *pix) ;

/**
 * @fn int getPixelBleu(const Pixel *pix)
 * @brief Récupère la valeur bleu du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in] pix pointeur sur Pixel.
 * @return Un entier, la valeur bleu du pixel seléctioné.
 */
int getPixelBleu(const Pixel *pix) ;

/**
 * @fn void setPixelRouge(Pixel *pix, const int valeur)
 * @brief Modifie la valeur rouge du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in, out] pix pointeur sur Pixel.
 * @param[in] valeur Entier corespondant à la valeur rouge du pixel. 
 * @return 0, si tout est ok.
 */
void setPixelRouge(Pixel *pix, const int valeur) ;

/**
 * @fn void setPixelVert(Pixel *pix, const int valeur)
 * @brief Modifie la valeur vert du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in, out] pix pointeur sur Pixel.
 * @param[in] valeur Entier corespondant à la valeur verte du pixel. 
 * @return 0, si tout est ok.
 */
void setPixelVert(Pixel *pix, const int  valeur) ;

/**
 * @fn void setPixelBleu(Pixel *pix,const  int valeur)
 * @brief Modifie la valeur bleu du pixel seléctioné en vérifiant sa validité.
 *
 * @param[in, out] pix pointeur sur Pixel.
 * @param[in] valeur Entier corespondant à la valeur Bleu du pixel. 
 * @return 0, si tout est ok.
 */
void setPixelBleu(Pixel *pix, const int valeur) ;


/* ********************************************************************* */
/*                                                                       */
/*                           Test de regression                          */
/*                                                                       */
/* ********************************************************************* */

/**
 * @fn void ImRegressionTest2()
 * @brief Teste toutes les fonctions du module Pixel.h
 *
 * @return 0 si tout est OK
 */
void ImRegressionTest2() ;


#endif
